// 创建一个cart模块
export default {
	namespaced: true,
	state: {
		// 测试数据
		num: 666,
		// 购物车的数据源
		cart: uni.getStorageSync('cart') || []
	},
	mutations: {
		// 定义一个清楚已支付过商品的方法
		clearPayGoods(state) {
			state.cart = state.cart.filter(item => {
				return !item.goods_status
			})
		},
		// 修改所有商品的状态
		changeAllState(state, bool) {
			// 将所有的商品的状态改为 bool
			state.cart.forEach(item => {
				item.goods_status = bool
			})
			// 将修改后的数据存储到本地
			uni.setStorageSync('cart', state.cart)
		},
		// 定一个删除购物车中商品的方法
		delGoods(state, id) {
			state.cart = state.cart.filter(item => {
				return item.goods_id !== id
			})
			// 将返回的新数组保存到本地
			uni.setStorageSync('cart', state.cart)
		},
		// 定义一个修改购物车商品数量的方法
		changNum(state, goodsObj) {
			const obj = state.cart.find(item => {
				return item.goods_id === goodsObj.goods_id
			})
			// 判断元素是否存在
			if (obj) {
				obj.goods_count = goodsObj.goods_count
			}
			// 修改后的数据保存到本地
			uni.setStorageSync('cart', state.cart)
		},
		// 定义一个修改商品状态的方法
		changStatus(state, goodsObj) {
			// 根据 goodsObj 修改对应的商品状态
			// 得到要修改状态的商品数据
			const obj = state.cart.find(item => {
				return item.goods_id === goodsObj.goods_id
			})
			// 判断元素是否存在
			if (obj) {
				// 修改对应的状态
				obj.goods_status = goodsObj.goods_status
			}
			// 将修改后的数据保存到本地
			uni.setStorageSync('cart', state.cart)
		},
		// 向 catr 中添加商品信息
		//  goodsObj: id & name & price & logo & status
		addToCart(state, goodsObj) {
			// 将商品信息添加到cart中
			// 如果这件商品存在,将对应的数量 +1 
			// 判断是否存在
			const obj = state.cart.find(item => {
				return item.goods_id === goodsObj.goods_id
			})
			if (!obj) {
				// 如果这件商品在购物车中不存在：直接将商品添加到 cart 中
				state.cart.push(goodsObj)
			} else {
				obj.goods_count += 1
			}
			// 将数据保存到本地
			uni.setStorageSync('cart', state.cart)
		}
	},
	actions: {},
	getters: {
		// 商品的总数
		total(state) {
			// 使用reduce方法优化
			return state.cart.reduce((sum, item) => {
				return sum += item.goods_status ? item.goods_count : 0
			}, 0)
			// 得到 cart 中所有商品的总数
			// let sum = 0 // 商品的总数
			// state.cart.forEach(item => {
			// 	if (item.goods_status) {
			// 		sum += item.goods_count
			// 	}
			// })
			// return sum
		},
		// 判断是不是全选的状态
		isChecked(state) {
			return state.cart.every(item => {
				return item.goods_status
			})
		},
		// 商品总价
		totalmoney(state) {
			return state.cart.reduce((sum, item) => {
				return sum += item.goods_status ? item.goods_count * item.goods_price : 0
			}, 0)
		}
	}
}
